Fox's Git Mirrors
🗀 Files • ☸ Work (0) • 🖹 Commits (1037) • ⑃ Branches (1) • ⌆ Tags (0) • ♥ Thanks (0)
-─
<p align="center">
<img src="docs/assets/banner.jpg" alt="Sortie — Turn tracker tickets into agent sessions" width="100%">
</p>
<div align="center">
Your next sprint isn't capped by headcount.
The open-source coding agent orchestrator.<br/>
Turn tracker tickets into autonomous agent sessions. Agent-agnostic, tracker-agnostic. Run in parallel.


English | ç®€ä½“ä¸æ–‡
</div>
Sortie assumes your coding agent already produces useful results when you run it manually. Around that agent it handles parallel scheduling, isolated workspaces, persistent state with retry, CI feedback, review comments, between-turn comment steering, and cost tracking. Sortie does not improve the agent's output.
Install
T282828
curl -sSL https://get.sortie-ai.com/install.sh | sh
Or via Homebrew: T383838brew install sortie-ai/tap/sortie
The Problem
Coding agents can handle routine engineering tasks — bug fixes, dependency updates, test coverage, feature work — when they have good system prompts, appropriate tool permissions, and have been tested on representative issues. But running validated agents at scale requires infrastructure that doesn't exist yet: isolated workspaces, retry logic, state reconciliation, tracker integration, cost tracking. Teams build this ad-hoc, poorly, and differently each time.
Sortie is that infrastructure.
How It Works
Define your T383838WORKFLOW.md in a single file alongside the target repository:
T282828
---
tracker:
kind: github
api_key: $GITHUB_TOKEN
project: acme/billing-api
query_filter: "label:agent-ready"
active_states: [todo, in-progress]
handoff_state: review
terminal_states: [done]
agent:
kind: claude-code
max_concurrent_agents: 4
---
You are a senior engineer.
## {{ .issue.identifier }}: {{ .issue.title }}
{{ .issue.description }}
Sortie watches this file, polls for matching issues, creates an isolated workspace
for each, and launches the agent with the rendered prompt. It handles the rest:
stall detection, timeout enforcement, retries with backoff, state reconciliation
with the tracker, and workspace cleanup when issues reach terminal states. Changes
to the workflow are applied without restart.
The T383838agent.kind field selects which coding agent runs each session. Sortie ships
adapters for Claude Code, Copilot, and Codex — switching is a one-line change.
See the adapter reference for configuration
details and examples/ for complete workflow files.
Architecture
Sortie is a single Go binary. It uses SQLite for persistent state (retry queues, session
metadata, run history) and communicates with coding agents over stdio. The orchestrator
is the single authority for all scheduling decisions; there is no external job queue or
distributed coordination. For full architectural details, see
Issue trackers and coding agents are integrated through adapter interfaces. Adding support
for a new tracker or agent is an additive change: implement the interface in a new package.
Supported trackers: GitHub Issues, Jira, and Linear. Supported agents: Claude Code, Copilot,
OpenCode, and Codex. See docs/decisions/ for detailed rationale on
technology choices.
Documentation
Prior Art
Sortie's architecture is informed by OpenAI Symphony,
a spec-first orchestration framework with an Elixir reference implementation. Sortie diverges
in language (Go for deployment simplicity), persistence (SQLite instead of in-memory state),
extensibility (pluggable adapters for any tracker or agent, not hardcoded to Linear and Codex),
and completion signaling (orchestrator-managed handoff transitions instead of relying solely on
agent-initiated tracker writes).
Why "Sortie"
A sortie is a military and aviation term for a single mission executed autonomously. The
metaphor is precise: the orchestrator dispatches agents on missions (issues), each with an
isolated workspace, a defined objective, and an expected return. The name is short, two
syllables, pronounceable across languages, and does not conflict with existing projects in
this domain.
Roadmap
License
Served by rngit 1.4.1 - Generated in 0.04s